﻿//////////////////////////////////////////////////////////////////////////////
//
//  Copyright © 1998-2024 Glodon Company Limited.  All rights reserved.
//
//  Use of this software is subject to the terms of the Glodon license
//  agreement provided at the time of installation or download, or which
//  otherwise accompanies this software in either electronic or hard copy form.  
//
//////////////////////////////////////////////////////////////////////////////

// Reviewed
#pragma once

#include "GcmpModelInterface.h"
#include "IElement.h"
#include "OwnerPtr.h"

namespace gcmp
{
    class IPlane;
    class IGraphicsPlane;
    /// \brief 工作平面的接口的工具类。
    /// 
    /// 工作平面主要在ModelVeiw中使用，为ModelView提供基准平面。每个视图可以有一个工作平面。
    /// 一个文档还可以有一个全局的工作平面，如果激活全局工作平面，不论切换到那个视图，都使用全
    /// 局工作平面。如在编辑模式下，工作全局工作平面会被激活。
    class GCMP_MODEL_INTERFACE_EXPORT WorkPlaneUtils
    {
    public:
#pragma region Static
        /// \brief 全局工作平面是否激活。
        ///
        /// \param pDoc 文档指针。
        /// \return 返回全局工作平面是否处于激活状态。
        static bool IsGlobalWorkPlaneEnabled(const IDocument* pDoc);
        /// \brief 激活全局工作平面。
        ///
        /// 激活全局工作平面。全局工作平面激活后，原有的视图特定工作平面将会被屏蔽，
        /// 不论切换到哪个视图，都使用同一个工作平面。
        /// \param pDoc 文档指针。
        /// \return 返回全局工作平面是否激活成功。
        static void EnableGlobalWorkPlane(IDocument* pDoc, bool bEnable);
        /// \brief 获取全局工作平面。
        ///
        /// \param pDoc 文档指针。
        /// \return 返回全局工作平面的图形平面，如果全局工作平面未激活，返回为空指针。
        static const IPlane* GetGlobalWorkPlane(const IDocument* pDoc);
        /// \brief 设置全局工作平面。
        ///
        /// \param pDoc 文档指针。
        /// \param plane 全局工作平面的新的GraphicsPlane。
        /// \return 返回全局工作平面是否设置成功。
        static bool SetGlobalWorkPlane(IDocument* pDoc, const IPlane* plane);
#pragma endregion Static
    };
}



